package com.glela.goods.service;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

import com.glela.goods.dao.vo.LimitSaleGoodsInventroy;
import com.glela.goods.model.Inventory;
import com.glela.goods.model.vo.inventory.DynamicInventoryVo;

/**
 * 库存服务类
 * @author liujie
 * @2016年10月20日
 */
public interface InventoryService {
	public Inventory selectInventoryByGoodsStoreIdSpecInfo(long goodsId, int storeId, String specInfo);

	/**
	 * <dl>
	 * <dt>查询库存</dt>
	 * <dd>状态为status为1的库存，如果可用库存小于等于0查询为空</dd>
	 * </dl>
	 * @param productId 货品ID
	 * @return Inventory 库存信息
	 * @author zls
	 * @date 2017年7月28日 下午1:40:58
	 */
	Inventory findByProductId(long productId);

	/**
	 * <dl>
	 * <dt>查询动态库存</dt>
	 * <dd>查处所有商品goodsId对应的规格信息，再找出当前在分时抢购的商品明细。比较真实库存与分时限购数，取最小值为此规格的最小库存，累加到商品的总可售库存</dd>
	 * </dl>
	 * @param goodsId 商品id
	 * @return long 可用库存
	 * @author zls
	 * @date 2017年7月12日 上午10:55:09
	 */
	long findDynaByGoodsId(long goodsId);

	/**
	 * <dl>
	 * <dt>批量查询商品总库存</dt>
	 * </dl>
	 * @param goodsIds 商品ID集合
	 * @return Map<Long,Long>
	 * @author zls
	 * @date 2017年8月3日 下午6:23:55
	 */
	Map<Long, Long> findDynaByGoodsId(Collection<Long> goodsIds);

	/**
	 * <dl>
	 * <dt>查询分时抢购库存</dt>
	 * </dl>
	 * @param goodsId 商品ID
	 * @param limitTimeSaleId 分时抢购ID
	 * @return long 可用库存
	 * @author zls
	 * @date 2017年7月27日 下午5:24:25
	 */
	long findDynaByGoodsId(long goodsId, int limitTimeSaleId);

	/**
	 * <dl>
	 * <dt>查询动态库存</dt>
	 * <dd>查出商品当前规格下的真实库存，再查询当前在分时抢购中的商品明细。比较真实库存与分时限购数，取最小值为当前库存</dd>
	 * <dd>返回结果：可能为空，表示异常库存，需调用时判断</dd>
	 * </dl>
	 * @param productId 商品规格id
	 * @return DynamicInventoryVo 无库存返回null
	 * @author zls
	 * @date 2017年7月12日 上午11:34:09
	 */
	DynamicInventoryVo findDynaByProductId(long productId);
	//	Map<Long, DynamicInventoryVo> findDynaByProductId(Collection<Long> productIds);

	/**
	 * <dl>
	 * <dt>批量查找分时抢购下商品总库存</dt>
	 * </dl>
	 * @param limitSaleGoodsIdMap key:分时抢购ID，value:分时抢购下的商品ID集合
	 * @return LimitSaleGoodsInventroy
	 * @author zls
	 * @date 2017年8月1日 下午5:16:45
	 */
	public LimitSaleGoodsInventroy findDynaByGoodsId(Map<Integer, Set<Long>> limitSaleGoodsIdMap);
	
	
	
	public int  updateInventory(Long inventoryId, Integer quantity ) throws Exception ;
	
}